package com.cysoft.starter.log.core.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Objects;
import java.util.stream.Stream;

/**
 * @author 玖零
 * @version V0.0.1
 * @project cysoft-spring-boot-starter-log
 * @package com.cysoft.starter.log.core.enums
 * @date 2025-02-27 19:06
 * @desc 输出类型
 */
@Getter
@AllArgsConstructor
public enum OutputEnum {

    /**
     * 默认输出到控制台，不存储日志信息
     */
    DEFAULT("default", "控制台"),

    /**
     * event 方式
     */
    EVENT("event", "event事件方式"),

    /**
     * elasticsearch
     */
    ELASTICSEARCH("elasticsearch", "elasticsearch"),

    /**
     * opensearch
     */
    OPENSEARCH("opensearch", "opensearch"),

    /**
     * kafka 通过发送消息到kafka由其他系统消费处理日志信息
     */
    KAFKA("kakfa", "kafka"),

    /**
     * rabbitmq
     */
    RABBITMQ("rabbitmq", "rabbitmq"),

    /**
     * jdbc 存储到数据库中，例如mysql等
     */
    JDBC("jdbc", "jdbc"),
    ;

    /**
     * 存储类型名称
     */
    private final String code;

    /**
     * 存储类型描述
     */
    private final String desc;

    /**
     * 根据code获取枚举
     *
     * @param code
     * @return
     */
    public static OutputEnum getByCode(String code) {
        Objects.requireNonNull(code);
        return Stream.of(values())
                .filter(bean -> bean.code.equals(code))
                .findAny()
                .orElseThrow(() -> new IllegalArgumentException(code + "not exists"));
    }
}
